ES6新特性

ES6的常用新特性简介,全部特性可参阅 Ecma-International
MDN
ES6入门
ES6 教程

ES6全称ECMAScript 6.0,是JavaScript的下一个版本标准,2015.06发版。ECMAScriptJavaScript的关系是,前者是后者的规格,后者是前者的一种实现。

let 与 const

ES2015(ES6)新增加了两个重要的JavaScript关键字: letconst
ES6明确规定,代码块内如果存在let或者 const,代码块会对这些命令声明的变量从块的开始就形成一个封闭作用域。代码块内,在声明变量之前使用它会报错,称为暂时性死区
ES6的块级作用域必须有大括号,如果没有大括号,JavaScript引擎就认为不存在块级作用域。

解构赋值

ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构赋值。

let [a, b, c] = [1, 2, 3]; // 基本
let [a, [[b], c]] = [1, [[2], 3]]; //嵌套
let [a, , b] = [1, 2, 3]; // 可忽略
let [a = 1, b] = []; // a = 1, b = undefined // 不完全解构
let [a, ...b] = [1, 2, 3]; // 剩余运算符
let [a, b, c, d, e] = 'hello'; // 字符串等
let { a, b } = { a: 'aaa', b: 'bbb' }; // 对象模型的解构 前后两个kay需对应

Symbol

ES6引入了一种新的原始数据类型Symbol,表示独一无二的值,最大的用法是用来定义对象的唯一属性名。
ES6数据类型除了NumberStringBooleanObjectnullundefined,还新增了 Symbol

let s1 = Symbol("s");
let s2 = Symbol("s");
console.log(s1 === s2); //false

Spread / Rest 操作符

Spread用于将数组作为参数直接传入函数。

var s = ['1', '2', '3'];
function f(s1,s2,s3){
    console.log(`Hello ${s1},${s2},${s3}`); //ES6新增字符串中加入变量和表达式
}
f(...s); //Hello 1,2,3

Rest用于函数传参传递数组。

function f(...args){
    console.log(args);
}
f(1,2,3,4,5); //[1, 2, 3, 4, 5]

箭头函数

ES6中,箭头函数就是函数的一种简写形式,使用括号包裹参数,跟随一个 =>,紧接着是函数体,特别需要注意的是箭头函数是继承当前上下文的this关键字。

var add = (a, b) => a + b;
var show = a => console.log(a);
var test = (a,b,c) => {console.log(a,b,c);return a+b+c;}
add(1,1); //2
show(1); //1
test(1,1,1); //1 1 1

参数默认值

function f(a = 1){
    console.log(a);
}
f(); //1
f(11); //11

字符串拓展

ES6之前判断字符串是否包含子串,用indexOf方法,ES6新增了子串的识别方法。

数值拓展

数组拓展

迭代器

ES6提供了更接近传统语言的写法,引入了class这个概念,作为对象的模板。通过class关键字,可以定义类,与多数传统语言类似。不过,ES6class不是新的对象继承模型,它只是原型链的语法糖表现形式。

class Me {
  constructor() {
    console.log("constructor");
  }
  study() {
    console.log('study');
  }
}

console.log(typeof Me); //function
let me = new Me(); //constructor
me.study(); //study

Promise 对象

Promise是异步编程的一种解决方案。
从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。
Promise异步操作有三种状态:pendingfulfilledrejected。除了异步操作的结果,任何其他操作都无法改变这个状态。
then方法接收两个函数作为参数,第一个参数是Promise执行成功时的回调,第二个参数是 Promise执行失败时的回调,两个函数只会有一个被调用。

const p1 = new Promise(function(resolve,reject){
    resolve('resolve');
}); 
const p2 = new Promise(function(resolve,reject){
    reject('reject');
});
p1.then(function(v){  
    console.log(v); //resolve
});
p2.then(function(v){ 
    console.log(v);
},
function(v){
    console.log(v); //reject
});